(() => {
  // 定义一个类，类中的属性值的类型时不确定的，方法中的参数及返回值的类型也是不确定的
  // 定义一个泛型类
  class GenericNumber<T> {
    // 默认的属性的值的类型时泛型类型
    defaultValue: T;
    add: (x: T, y: T) => T;
  }

  // 在实例化类的对象的时候，在确定泛型的类型
  const g1: GenericNumber<number> = new GenericNumber<number>();
  g1.defaultValue = 100;
  g1.add = function (x, y) {
    return x + y;
  };
})();
